feat(gen): add array element type discrimination for oneOf/anyOf #1589
+468
−12
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
Adds array element type discrimination for oneOf/anyOf schemas, enabling automatic variant selection when variants differ by their array element types (e.g.,
string[]vsinteger[]).This feature is conservative - it only enables array element discrimination when variants also have at least one unique field by name, ensuring reliable fallback when the array field is missing or empty.
Changes
ArrayElementTypeandArrayElementTypeIDtoUniqueFieldVariantIR metadatagetArrayElementTypeInfo()to extract element types from array type IDsd.Capture()andd.ArrIter()Example Schema
Before: "type-based discrimination with same jxType" error
After: Generates working decoder that peeks at first element
Generated Code
Testing
_testdata/positive/array_element_discrimination.jsonLimitations (Future Work)
array[array[string]]vsarray[array[integer]]) - requires recursive peeking🤖 Generated with Claude Code